package com.majie.utils.utils;

import net.coobird.thumbnailator.Thumbnails;
import net.coobird.thumbnailator.geometry.Positions;
import net.coobird.thumbnailator.geometry.Position;

import javax.imageio.ImageIO;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;

/**
 * 图片处理相关工具类
 *  导入
 *         <dependency>
 *             <groupId>net.coobird</groupId>
 *             <artifactId>thumbnailator</artifactId>
 *             <version>[0.4, 0.5)</version>
 *         </dependency>
 *
 * 更多功能请查看 https://github.com/coobird/thumbnailator
 *
 * @author majie
 * @date 2018/6/19.
 */
public class ImageUtils {

    /**
     * 整体设置缩放比
     *
     * @param source 来源
     * @param dest   目的地
     * @param scale  缩放比
     */
    public static void scale(String source, String dest, double scale) {
        try {
            Thumbnails.of(source)
                    .scale(scale)
                    .toFile(dest);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    /**
     * 设置宽高对应的缩放比
     *
     * @param source      来源
     * @param dest        目的地
     * @param scaleWidth  宽放比
     * @param scaleHeight 高缩放比
     */
    public static void scale(String source, String dest, double scaleWidth, double scaleHeight) {
        try {
            Thumbnails.of(source)
                    .scale(scaleWidth, scaleHeight)
                    .toFile(dest);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }


    /**
     * 设置缩放比
     *
     * @param source 来源
     * @param dest   目的地
     * @param weight 缩放比
     * @param height 宽高
     */
    public static void size(String source, String dest, int weight, int height) {
        try {
            Thumbnails.of(source)
                    .size(weight, height)
                    .toFile(dest);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    /**
     * 旋转
     *
     * @param source 来源
     * @param dest   目的地
     * @param scale  缩放比    不设置会报错
     * @param angle  旋转角度
     */
    public static void rotate(String source, String dest, double scale, double angle) {
        try {
            Thumbnails.of(source)
                    .scale(scale)
                    .rotate(angle)
                    .toFile(dest);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    /**
     * 添加水印
     *
     * @param source    来源
     * @param dest      目的地
     * @param watermark 水印位置
     * @param scale     缩放比    不设置会报错
     * @param position  水印位置
     * @param opacity   透明度
     */
    public static void watermark(String source, String dest, String watermark,
                                 double scale, Position position, float opacity) {
        try {
            BufferedImage watermarkImage = ImageIO.read(new File(watermark));
            Thumbnails.of(source)
                    .scale(scale)
                    .watermark(position, watermarkImage, opacity)
                    .toFile(dest);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    public static void main(String[] args) {
//        scale("banner.jpg", "dest", 2.0);
//        size("water.jpg", "dest", 30, 30);
//        rotate("banner.jpg", "dest", 2, 45);
        watermark("banner.jpg", "dest", "water.jpg", 2.0, Positions.BOTTOM_LEFT, 0.5f);
    }

}
